from flask import Flask, request, jsonify, abort
from flask_cors import CORS 
import json 
import os 

app = Flask(__name__) 
CORS(app)  # 允许跨域请求 

# 数据存储路径 
DATA_FILE = os.path.join(os.path.dirname(__file__), 'todos.json') 

def load_todos(): 
    """加载待办事项数据""" 
    if not os.path.exists(DATA_FILE): 
        return [] 
    with open(DATA_FILE, 'r') as f: 
        return json.load(f) 

def save_todos(todos): 
    """保存待办事项数据""" 
    with open(DATA_FILE, 'w') as f: 
        json.dump(todos, f, indent=2) 

@app.route('/api/todos', methods=['GET']) 
def get_todos(): 
    """获取所有待办事项""" 
    todos = load_todos() 
    return jsonify(todos) 

@app.route('/api/todos', methods=['POST']) 
def add_todo(): 
    """添加待办事项""" 
    data = request.get_json() 
    if not data or 'text' not in data: 
        abort(400)  # 无效请求 
    todos = load_todos() 
    
    # 查找当前最大ID值
    max_id = 0
    for todo in todos:
        if todo['id'] > max_id:
            max_id = todo['id']
    
    new_todo = { 
        'id': max_id + 1, 
        'text': data['text'], 
        'completed': False 
    } 
    todos.append(new_todo) 
    save_todos(todos) 
    return jsonify(new_todo), 201

@app.route('/api/todos/<int:todo_id>', methods=['DELETE']) 
def delete_todo(todo_id): 
    """删除待办事项""" 
    todos = load_todos() 
    todo_index = next((index for index, todo in enumerate(todos) if todo['id'] == todo_id), None) 
    
    if todo_index is None: 
        abort(404)  # 未找到待办事项 
        
    deleted_todo = todos.pop(todo_index) 
    save_todos(todos) 
    return jsonify(deleted_todo), 200

@app.route('/api/todos/<int:todo_id>/toggle', methods=['PUT']) 
def toggle_todo(todo_id): 
    """切换待办事项完成状态""" 
    todos = load_todos() 
    todo = next((todo for todo in todos if todo['id'] == todo_id), None) 
    
    if todo is None: 
        abort(404)  # 未找到待办事项 
    
    # 确保completed字段存在，如果不存在则初始化为False
    if 'completed' not in todo:
        todo['completed'] = False
        
    todo['completed'] = not todo['completed'] 
    save_todos(todos) 
    return jsonify(todo), 200 

if __name__ == '__main__': 
    app.run(port=5000, debug=True)